There is a growing need to display 2-dimensional images in a range of gray scale or colors. Examples of the use of such 2-dimensional images include displays of geographic detail depicting the depth mapping of the ocean, acoustic prediction plots, photographs and logos.
In these applications, flexibility and versatility in the image generation is useful. For example, it is often desirable to pan on a sub-area of an overall image of the ocean floor, or to zoom on an area of interest, down to the finest degree of detail that is permitted by the granularity of the data.
Further, it is often desirable to reshade an image in order to highlight particular data features. An example of the latter is the reshading of an image of the ocean floor to highlight certain underwater ridges.
One of the problems of the 2-dimensional image processing technology of the prior art is that the process of transforming the data to a displayable image is very time consuming.
Another problem of the prior art image processing technology is that the dimensions or granularity of the source data matrix usually does not correspond to the pixel pattern of the viewing screen. For example, if the picture element count on the viewing screen is 1000.times.1000, and the data matrix has a different data element count either of greater density or lesser density than that of the viewing screen, then there is a problem of deciding which data elements get mapped to which display screen pixels.
A related problem is that the X-Y proportions of the raw input data in the preceding situation (aspect ratio) may not correspond to the X-Y proportions of the screen area for many reasons, including the fact that screens are not available in a standard aspect ratio.
In the prior art, displaying a data matrix as solid-shaded colors on a rectangular screen area involves three steps. In the first step, data values are mapped to a display matrix. In the second step, the raw data values are convened to color values. These values usually are an index into a color map. In the third step, the display matrix, which is in memory, is bit block transferred to display memory.
Efficient mechanisms for the transferring a display matrix from general-purpose memory to display memory are generally available today. Converting each data point to a color index, however, requires some care, in order not to degrade performance. Efficient mapping techniques therefore are critical.
There are several approaches in the prior art for mapping data matrixes to computer screens. One involves mapping each picture element in the screen viewport to the data matrix using the ratios of their sides. This process, termed "proportional mapping," may require two floating point multiplies, two float to integer conversions, and an integer multiply and add for each of possibly a million pixels; and is likely to be slow to execute.
Another approach is to precompute the data offsets for each pixel location in X and Y, and combining the offsets at each display element to yield the corresponding data item. While this approach reduces the math required per display element, the fact that each display element continues to require any computation results in a slow routine.
A third approach is to create an oversized bitmap, and then bit block transfer a subportion having similar proportions as the screen area. This approach is initially slow, inflexible as far as displaying only the data of interest in a prescribed screen area, and is memory restricted.
Yet another approach of the prior art is to arbitrarily decimate or replicate the raw data, so that it will have similar proportions as the screen area. This has the disadvantages of being restrictive, and it introduces unnecessary distortions.